#pragma once
#include "..\\GDK\\DarkGDK_Classes.h"
#include "TGameObject.h"
#include "Effect.h"
#include "Background.h"
#include "ICollidable.h"
#include "IInteractive.h"
#include "WSClient.h"
#include "WSServer.h"
#include "ResMgr.h"
#include "TextBox.h"
#include "Button.h"
#include "GameState.h"
#include "Timer.h"
#include "ParticleSystem.h"
#include "xsync.h"
#include "ParticleSystem.h"

#pragma comment (lib, "..\\tinyXML\\tinyxml.lib")

class GameEngine 
{
    typedef std::list<TGameObject *> GameObjectList;     

    static GameObjectList Objects;
    static GameObjectList ObjectsCollidable;
    static GameObjectList ObjectsToRemove;
    static GameObjectList ObjectsToAdd;
    static Background* ActiveBackground;
    static XSync* gSync;
    static DWORD time;
public:
    static void MainLoopProcess();
    static void ClearObjects();
    static void AddObject(TGameObject *obj);
    static void RemoveObject(TGameObject *obj);
    static DWORD GetTime();

    static void CheckProcessMemLeaks();
    static void Lock();
    static void Unlock();

    static void SetBackground(Background *back);
    static Background* GetBackground();
};
